﻿using System;

using Fennec;
using Fennec.EII;
using Fennec.INFO;

class TestUnité : Test
{
    public new static void test()
    {
        LogManager.WriteLine("-------- Initialisations\n");

        System.Drawing.Point p1 = new System.Drawing.Point(0, 0);
        System.Drawing.Point p2 = new System.Drawing.Point(1, 1);
        System.Drawing.Point p3 = new System.Drawing.Point(3, 0);
        Fennec.EII.UnitéEtudiantEII a = new Fennec.EII.UnitéEtudiantEII(p1);
        Fennec.EII.UnitéEnseignantEII b = new Fennec.EII.UnitéEnseignantEII(p1);
        Fennec.EII.UnitéDirecteurEII c = new Fennec.EII.UnitéDirecteurEII(p2);

        LogManager.WriteLine("a : " + a);
        LogManager.WriteLine("b : " + b);
        LogManager.WriteLine("c : " + c);
        LogManager.WriteLine("");

        LogManager.WriteLine("-------- Santé\n");

        LogManager.WriteLine("a.estVivant(), b.estVivant(), c.estVivant()");
        LogManager.WriteLine("" + a.estVivant() + ", " + b.estVivant() + ", " + c.estVivant());
        LogManager.WriteLine("");

        LogManager.WriteLine("a.endommager(3), b.endommager(299), c.tuer()");
        a.endommager(3);
        b.endommager(299);
        c.tuer();
        LogManager.WriteLine(a);
        LogManager.WriteLine(b);
        LogManager.WriteLine(c);
        LogManager.WriteLine("");

        LogManager.WriteLine("a.estVivant(), b.estVivant(), c.estVivant()");
        LogManager.WriteLine("" + a.estVivant() + ", " + b.estVivant() + ", " + c.estVivant());
        LogManager.WriteLine("");

        LogManager.WriteLine("a.guerir(2), b.guerir(299), c.guerir(20)");
        a.guérir(2);
        b.guérir(299);
        c.guérir(20);
        LogManager.WriteLine(a);
        LogManager.WriteLine(b);
        LogManager.WriteLine(c);
        LogManager.WriteLine("");

        LogManager.WriteLine("a.estVivant(), b.estVivant(), c.estVivant()");
        LogManager.WriteLine("" + a.estVivant() + ", " + b.estVivant() + ", " + c.estVivant());
        LogManager.WriteLine("");

        LogManager.WriteLine("-------- Vision & déplacement\n");

        LogManager.WriteLine("a.peutVoir((0,0)), a.peutVoir((1,1)), a.peutVoir((3,0)) (distance de Manhattan <= 2)");
        LogManager.WriteLine("" + a.peutVoir(p1) + ", " + a.peutVoir(p2) + ", " + a.peutVoir(p3));
        LogManager.WriteLine("");

        LogManager.WriteLine("a.peutSeDeplacer((0,0)), a.peutSeDeplacer((1,1)), a.peutSeDeplacer((3,0))");
        LogManager.WriteLine("" + a.peutSeDéplacer(p1) + ", " + a.peutSeDéplacer(p2) + ", " + a.peutSeDéplacer(p3));
        LogManager.WriteLine("");

        LogManager.WriteLine("-------- Actions spéciales\n");

        LogManager.WriteLine("a.peutFonderVille(), b.peutFonderVille(), c.peutFonderVille()");
        LogManager.WriteLine("" + a.peutFonderVille() + ", " + b.peutFonderVille() + ", " + c.peutFonderVille());
        LogManager.WriteLine("");

        LogManager.WriteLine("a.peutAttaquer(), b.peutAttaquer(), c.peutAttaquer()");
        LogManager.WriteLine("" + a.peutAttaquer() + ", " + b.peutAttaquer() + ", " + c.peutAttaquer());
        LogManager.WriteLine("");

        LogManager.WriteLine("-------- Combats impossibles\n");

        LogManager.WriteLine("b.attaquer(a)");
        try {
            b.attaquer(a);
        } catch (ActionImpossibleException e) {
            LogManager.WriteLine(e.ToString());
        }
        LogManager.WriteLine("");

        LogManager.WriteLine("a.attaquer(c)");
        try {
            a.attaquer(c);
        } catch (ActionImpossibleException e) {
            LogManager.WriteLine(e.ToString());
        }
        LogManager.WriteLine("");

        LogManager.WriteLine("-------- Combat (ici ça clashe)\n");

        LogManager.WriteLine("Avant le combat :");
        UnitéEtudiant d = new Fennec.EII.UnitéEtudiantEII(p1);
        UnitéEtudiant f = new Fennec.INFO.UnitéEtudiantINFO(p1);
        LogManager.WriteLine("d : " + d);
        LogManager.WriteLine("e : " + f);
        LogManager.WriteLine("");

        LogManager.WriteLine("d.attaquer(e)");
        d.attaquer(f);
        LogManager.WriteLine("");
        
        LogManager.WriteLine("d : " + d);
        LogManager.WriteLine("e : " + f);
        LogManager.WriteLine("");
    }
}
